package br.com.comprasPublicas.entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;


/**
 *
 * @author helsen_rafael
 * @since 11/01/11
 */
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="tipo_autorizacao", discriminatorType=DiscriminatorType.INTEGER)
@DiscriminatorValue("0")
public class Autorizacao implements Serializable {
/**Ao incluir uma autorizaçao haverá uma opção por cotação ou pedido de compra.
 * Em ambas opçôes os parâmetros aqui contidos serão repassados para a Entidade
 * pelo método de herança.
*/
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_autorizacao;

    @Temporal(javax.persistence.TemporalType.DATE)
    private Date data_emissao;

    @OneToOne(targetEntity=Pessoa.class)
    private Pessoa pessoa;

    @Column(name="vendedor", length=100)
    private String vendedor;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="pedido", updatable=true, insertable=true)
    private Pedido pedido;

    @Column(name="condicao_pagamento", length=30)
    private String condicao_pagamento;

    @Column(name="condicao_entrega", length=30)
    private String condicao_entrega;

    @Column(name="observacao", length=300)
    private String observacao;

    @Column(name="valor_totalAutorizacao", length=300)
    private Double valor_totalAutorizacao;

    @Cascade(CascadeType.ALL)

    //Abaixo os Encapsulamentos dos Campos

    public int getId_autorizacao() {
        return id_autorizacao;
    }

    
    public void setId_autorizacao(int id_autorizacao) {
        this.id_autorizacao = id_autorizacao;
    }

 
    public Date getData_emissao() {
        return data_emissao;
    }

   
    public void setData_emissao(Date data_emissao) {
        this.data_emissao = data_emissao;
    }

    
    public String getCondicao_pagamento() {
        return condicao_pagamento;
    }

    
    public void setCondicao_pagamento(String condicao_pagamento) {
        this.condicao_pagamento = condicao_pagamento;
    }

    
    public String getObservacao() {
        return observacao;
    }

    
    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

   
    public Double getValor_totalAutorizacao() {
        return valor_totalAutorizacao;
    }

  
    public void setValor_totalAutorizacao(Double valor_totalAutorizacao) {
        this.valor_totalAutorizacao = valor_totalAutorizacao;
    }

    
    public Pessoa getPessoa() {
        return pessoa;
    }

    
    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    
    public String getVendedor() {
        return vendedor;
    }

    
    public void setVendedor(String vendedor) {
        this.vendedor = vendedor;
    }

    
    public Pedido getPedido() {
        return pedido;
    }

    
    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }

    
    public String getCondicao_entrega() {
        return condicao_entrega;
    }

    
    public void setCondicao_entrega(String condicao_entrega) {
        this.condicao_entrega = condicao_entrega;
    }
    

}
